package com.gxa.learning.pc.service;

import com.gxa.learning.core.exception.BusinessException;
import com.gxa.learning.core.pojo.ProjectApply;
import com.gxa.learning.core.service.BaseService;

import java.util.List;
import java.util.Map;

/**
 * @author 18380
 */
public interface ProjectApplyService extends BaseService<ProjectApply> {

    /**
     * 加入一个培训项目，需要申请的需要申请状态
     * 不需要申请的直接通过
     *
     * @param pid 项目
     * @param uid 用户
     * @throws Exception 异常处理
     */
    void projectApply(Long pid, Long uid) throws Exception;

    /**
     * 分页获取一个项目的学员信息
     */
    List<Map<String, Object>> getStudents(Long pid, String name, String company, String position, Integer page, Integer size) throws BusinessException;

    /**
     * 分页获取一个项目的学员信息的计数
     */
    Integer getStudentsCount(Long pid, String name, String company, String position) throws BusinessException;

    /**
     * 获取一个项目的所有学员信息
     */
    List<Map<String, Object>> getAllStudents(Long pid, String name, String company, String position) throws BusinessException;

    /**
     * 修改申请记录的状态
     * 报名状态（0,代表待审核、1表示通过、2表示没通过）
     */
    Integer setApplyStatus(List<Long> applyId, Integer status) throws Exception;

    /**
     * 获取所有的申请列表
     */
    List<Map<String, Object>> getAllApply(Long pid, Integer page, Integer size) throws BusinessException;

    /**
     * 获取所有的申请列表的总记录条数
     */
    Integer getAllApplyCount(Long pid) throws BusinessException;

    /**
     * 删除学员
     */
    void delStudent(Long id) throws BusinessException;


    /**
     * 用户报名成功 审核通过之后同时在反馈表添加一条数据
     *
     * @param userId    用户编号
     * @param projectId 项目编号
     * @throws Exception c
     */
    void insetFeed(Long userId, Long projectId) throws Exception;
}
